package pe.com.bbva.modpre.dominio;

import java.math.BigDecimal;

import javax.persistence.*;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

import pe.com.bbva.modpre.dominio.util.AuditoriaBean;


/**
 * The persistent class for the SOL_PRODUCTO database table.
 * 
 */
@Entity
@Table(name="SOL_PRODUCTO")
@SuppressWarnings("serial")
public class Producto extends AuditoriaBean {

	@Id
	@Column(unique=true, nullable=false, precision=16)
	@GeneratedValue(strategy = GenerationType.TABLE, generator = "SEQ_PRODUCTO")
	@TableGenerator(name = "SEQ_PRODUCTO", table = "SEQ_ENTIDAD", pkColumnName = "ENTIDAD", initialValue = 1,
	valueColumnName = "ULTIMO_ID", pkColumnValue = "pe.com.bbva.modpre.dominio.Producto", allocationSize = 1)
	private Long id;

	@Column(nullable=false, length=20)
	private String codigo;

	@Column(nullable=false, length=50)
	private String nombre;

	@Column(name="NOMBRE_CORTO", length=50)
	private String nombreCorto;

	@Column(length=200)
	private String descripcion;

	@Column(name="CADIC", precision=16 , scale=6)
	private BigDecimal cadic;
	
	@Column(name="COMISION", precision=16 , scale=6)
	private BigDecimal comision;
	
	@Column(name="TIPO_IMPOSITIVO", precision=16 , scale=6)
	private BigDecimal tipoImpositivo;
	
	@Column(name="RATIO_EFICIENCIA", precision=16 , scale=6)
	private BigDecimal ratioEficiencia;
	
	@Column(name="PESO", precision=16 , scale=6)
	private BigDecimal peso;
	
	//uni-directional many-to-one association to Valor
	@ManyToOne
	@JoinColumn(name="GRUPO_PRODUCTO", nullable=false)
	private GrupoProducto grupoProducto;
	
	//uni-directional many-to-one association to Valor
	@ManyToOne
	@JoinColumn(name="TIPO_BANCA", nullable=false)
	private TipoBanca tipoBanca;
	
	//uni-directional many-to-one association to Valor
	@ManyToOne
	@JoinColumn(name="ESTADO", nullable=false)
	private Valor estado;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getNombreCorto() {
		return nombreCorto;
	}

	public void setNombreCorto(String nombreCorto) {
		this.nombreCorto = nombreCorto;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	
	public BigDecimal getCadic() {
		return cadic;
	}

	public void setCadic(BigDecimal cadic) {
		this.cadic = cadic;
	}

	public BigDecimal getComision() {
		return comision;
	}

	public void setComision(BigDecimal comision) {
		this.comision = comision;
	}

	public BigDecimal getTipoImpositivo() {
		return tipoImpositivo;
	}

	public void setTipoImpositivo(BigDecimal tipoImpositivo) {
		this.tipoImpositivo = tipoImpositivo;
	}

	public BigDecimal getRatioEficiencia() {
		return ratioEficiencia;
	}

	public void setRatioEficiencia(BigDecimal ratioEficiencia) {
		this.ratioEficiencia = ratioEficiencia;
	}

	public BigDecimal getPeso() {
		return peso;
	}

	public void setPeso(BigDecimal peso) {
		this.peso = peso;
	}

	public GrupoProducto getGrupoProducto() {
		return grupoProducto;
	}

	public void setGrupoProducto(GrupoProducto grupoProducto) {
		this.grupoProducto = grupoProducto;
	}

	public TipoBanca getTipoBanca() {
		return tipoBanca;
	}

	public void setTipoBanca(TipoBanca tipoBanca) {
		this.tipoBanca = tipoBanca;
	}

	public Valor getEstado() {
		return estado;
	}

	public void setEstado(Valor estado) {
		this.estado = estado;
	}

	public String getProductoCompleto(){
		return grupoProducto.getNombre()+"-"+nombre;
	}
	
	@Override
	public int hashCode() {
		HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(3, 7);
		hashCodeBuilder.append(codigo);
		return hashCodeBuilder.toHashCode();
	}

	@Override
	public boolean equals(Object obj) {
		boolean equals = false;
		if (obj instanceof Producto) {
			Producto bean = (Producto) obj;
			EqualsBuilder equalsBuilder = new EqualsBuilder();
			equalsBuilder.append(codigo, bean.codigo);
			equals = equalsBuilder.isEquals();
		}
		return equals;
	}
	
	public static abstract class CODIGO
	{
		public final static String CONSTRUYO = "5";
	}
	
}